怎么在java 8的map中使用stream |
您所在的位置:网站首页 › 对象转map stream › 怎么在java 8的map中使用stream |
怎么在java 8的map中使用stream 简介Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用Stream呢? 基本概念Map有key,value还有表示key,value整体的Entry。 创建一个Map: Map someMap = new HashMap();获取Map的entrySet: Set entries = someMap.entrySet();获取map的key: Set keySet = someMap.keySet();获取map的value: Collection values = someMap.values();上面我们可以看到有这样几个集合:Map,Set,Collection。 除了Map没有stream,其他两个都有stream方法: Stream entriesStream = entries.stream(); Stream valuesStream = values.stream(); Stream keysStream = keySet.stream();我们可以通过其他几个stream来遍历map。 使用Stream获取map的key我们先给map添加几个值: someMap.put("jack","20"); someMap.put("bill","35");上面我们添加了name和age字段。 如果我们想查找age=20的key,则可以这样做: Optional optionalName = someMap.entrySet().stream() .filter(e -> "20".equals(e.getValue())) .map(Map.Entry::getKey) .findFirst(); log.info(optionalName.get());因为返回的是Optional,如果值不存在的情况下,我们也可以处理: optionalName = someMap.entrySet().stream() .filter(e -> "Non ages".equals(e.getValue())) .map(Map.Entry::getKey).findFirst(); log.info("{}",optionalName.isPresent());上面的例子我们通过调用isPresent来判断age是否存在。 如果有多个值,我们可以这样写: someMap.put("alice","20"); List listnames = someMap.entrySet().stream() .filter(e -> e.getValue().equals("20")) .map(Map.Entry::getKey) .collect(Collectors.toList()); log.info("{}",listnames);上面我们调用了collect(Collectors.toList())将值转成了List。 使用stream获取map的value上面我们获取的map的key,同样的我们也可以获取map的value: List listAges = someMap.entrySet().stream() .filter(e -> e.getKey().equals("alice")) .map(Map.Entry::getValue) .collect(Collectors.toList()); log.info("{}",listAges);上面我们匹配了key值是alice的value。 总结Stream是一个非常强大的功能,通过和map相结合,我们可以更加简单的操作map对象。 本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-formap 欢迎关注我的公众号:程序那些事,更多精彩等着您! 更多内容请访问 www.flydean.com |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |